/**
 * 时间格式化工具函数
 */

/**
 * 格式化相对时间
 * @param timeStr 时间字符串
 * @returns 格式化后的相对时间
 */
export function formatRelativeTime(timeStr: string): string {
  if (!timeStr) return ''
  
  const now = new Date()
  const time = new Date(timeStr)
  const diff = now.getTime() - time.getTime()
  
  // 小于1分钟
  if (diff < 60 * 1000) {
    return '刚刚'
  }
  
  // 小于1小时
  if (diff < 60 * 60 * 1000) {
    const minutes = Math.floor(diff / (60 * 1000))
    return `${minutes}分钟前`
  }
  
  // 小于1天
  if (diff < 24 * 60 * 60 * 1000) {
    const hours = Math.floor(diff / (60 * 60 * 1000))
    return `${hours}小时前`
  }
  
  // 小于7天
  if (diff < 7 * 24 * 60 * 60 * 1000) {
    const days = Math.floor(diff / (24 * 60 * 60 * 1000))
    return `${days}天前`
  }
  
  // 超过7天，显示具体日期
  const year = time.getFullYear()
  const month = time.getMonth() + 1
  const day = time.getDate()
  const currentYear = now.getFullYear()
  
  // 同一年只显示月日
  if (year === currentYear) {
    return `${month}月${day}日`
  }
  
  // 不同年显示年月日
  return `${year}年${month}月${day}日`
}

/**
 * 格式化标准时间
 * @param timeStr 时间字符串
 * @param format 格式化模板，默认 'YYYY-MM-DD HH:mm:ss'
 * @returns 格式化后的时间字符串
 */
export function formatDateTime(timeStr: string, format: string = 'YYYY-MM-DD HH:mm:ss'): string {
  if (!timeStr) return ''
  
  const date = new Date(timeStr)
  const year = date.getFullYear()
  const month = String(date.getMonth() + 1).padStart(2, '0')
  const day = String(date.getDate()).padStart(2, '0')
  const hours = String(date.getHours()).padStart(2, '0')
  const minutes = String(date.getMinutes()).padStart(2, '0')
  const seconds = String(date.getSeconds()).padStart(2, '0')
  
  return format
    .replace('YYYY', String(year))
    .replace('MM', month)
    .replace('DD', day)
    .replace('HH', hours)
    .replace('mm', minutes)
    .replace('ss', seconds)
}

/**
 * 格式化日期（不包含时间）
 * @param timeStr 时间字符串
 * @returns 格式化后的日期字符串 YYYY-MM-DD
 */
export function formatDate(timeStr: string): string {
  return formatDateTime(timeStr, 'YYYY-MM-DD')
}

/**
 * 格式化时间（不包含日期）
 * @param timeStr 时间字符串
 * @returns 格式化后的时间字符串 HH:mm:ss
 */
export function formatTime(timeStr: string): string {
  return formatDateTime(timeStr, 'HH:mm:ss')
}

/**
 * 获取今天的开始时间
 * @returns 今天00:00:00的Date对象
 */
export function getTodayStart(): Date {
  const today = new Date()
  today.setHours(0, 0, 0, 0)
  return today
}

/**
 * 获取今天的结束时间
 * @returns 今天23:59:59的Date对象
 */
export function getTodayEnd(): Date {
  const today = new Date()
  today.setHours(23, 59, 59, 999)
  return today
}

/**
 * 判断是否为今天
 * @param timeStr 时间字符串
 * @returns 是否为今天
 */
export function isToday(timeStr: string): boolean {
  if (!timeStr) return false
  
  const date = new Date(timeStr)
  const today = new Date()
  
  return date.getFullYear() === today.getFullYear() &&
         date.getMonth() === today.getMonth() &&
         date.getDate() === today.getDate()
}

/**
 * 判断是否为昨天
 * @param timeStr 时间字符串
 * @returns 是否为昨天
 */
export function isYesterday(timeStr: string): boolean {
  if (!timeStr) return false
  
  const date = new Date(timeStr)
  const yesterday = new Date()
  yesterday.setDate(yesterday.getDate() - 1)
  
  return date.getFullYear() === yesterday.getFullYear() &&
         date.getMonth() === yesterday.getMonth() &&
         date.getDate() === yesterday.getDate()
}

/**
 * 获取时间差描述
 * @param startTime 开始时间
 * @param endTime 结束时间，默认为当前时间
 * @returns 时间差描述
 */
export function getTimeDiff(startTime: string, endTime?: string): string {
  const start = new Date(startTime)
  const end = endTime ? new Date(endTime) : new Date()
  const diff = end.getTime() - start.getTime()
  
  if (diff < 0) return '0秒'
  
  const seconds = Math.floor(diff / 1000)
  const minutes = Math.floor(seconds / 60)
  const hours = Math.floor(minutes / 60)
  const days = Math.floor(hours / 24)
  
  if (days > 0) return `${days}天${hours % 24}小时`
  if (hours > 0) return `${hours}小时${minutes % 60}分钟`
  if (minutes > 0) return `${minutes}分钟${seconds % 60}秒`
  return `${seconds}秒`
}
